package org.chen.lock;

import org.chen.pool.JedisConnect;
import redis.clients.jedis.params.SetParams;

import java.util.Arrays;
import java.util.UUID;

public class LuaLockTest {
  public static void main(String[] args) {
    //在redis服务端创建好lua脚本后，
    // 通过redis-cli -a password script load --pipe的管道命令
    //将脚本缓存到redis服务器中，并获取sha1校验和

    JedisConnect connect = new JedisConnect();
    for (int i = 0; i < 10; i++) {
      connect.execute(jedis -> {
        //获取随机字符串,锁的value值
        String value = UUID.randomUUID().toString();

        //获取锁
        String set = jedis.set("a1", value, new SetParams().nx().ex(10));

        //判断是否拿到锁
        if (set!=null&& "OK".equals(set)){//拿到锁了

          //具体业务操作
          jedis.set("hi","hello world!");
          System.out.println(jedis.get("hi"));

          //操作完成，释放锁 evalsha命令：使用内置的 Lua 解释器，可以对 Lua 脚本进行求值
          jedis.evalsha("e41a6ac7aea86d835a332f14f7b722b9723675b6",
            Arrays.asList("k1"),Arrays.asList(value));
        }else {
          //没拿到锁
        }
      });
    }
  }
}
